//相交链表
import linkListDefine.ListNode;
public class intersectList {
    public ListNode intersect(ListNode a,ListNode b){
        int numA = 0,numB =0;//numA表示a数组的长度，numB表示b数组的长度
        ListNode startA = a;
        ListNode startB = b;//这里默认是链表a比链表b更加长，所以不用判断哪个链表更长
        while (startA!=null){
            startA = startA.next;
            numA++;
        }
        while(startB!=null){
            startB = startB.next;
            numB++;
        }
        //按道理来说，两个链表的长度是不唯一的，但是我认为是a长b短，方便写代码
        int c = numA-numB;
        startA = a;
        startB = b;
        while (c>0){//既然是有相交叉的链表，那么肯定在尾部相同的位置开始有相同的结点
            startA = startA.next;
            c--;
        }
        while (startA!=null){
            if(startB.data == startA.data){
                return startA;//返回交点位置
            }
            startB = startB.next;
            startA = startA.next;
        }
        return null;
    }
    public static void main(String[] args) {
        int[] a = new int[]{1,3,5,6,2,5,8};
        int[] b = new int[]{5,2,3,2,5,8};
        var main = new intersectList();
        ListNode res = main.intersect(ListNode.createList(a),ListNode.createList(b));
        System.out.println(res.data);
        System.out.println(res.next.data);
    }
}
